class Solution {
 public static String longestPalindrome(String s) {
        if (s == null || s.length() == 0) {
            return "";
        }
        int[] range = new int[2];
        char[] sChar = s.toCharArray();

        // 把回文字符串看成 中间都一样的字符串, 左右对称
        for (int i = 0; i < s.length(); i++) {
            // 找中间
            i = find(sChar, i, range);
        }
        return s.substring(range[0], range[1] + 1);
    }

    public static int find(char[] sChar, int min, int[] range) {
        int max = min;
        // 查找最中间的字符
        while (max < sChar.length - 1 && sChar[max + 1] == sChar[min]) {
            max++;
        }
        int index = max;

        // 从中间向左右检测是否对称
        while (min > 0 && max < sChar.length - 1 && sChar[min - 1] == sChar[max + 1]) {
            min--;
            max++;
        }

        // 记录对称开始和结束
        if (max - min > range[1] - range[0]) {
            range[0] = min;
            range[1] = max;
        }
        return index;
    }
}